본문으로 건너뛰기

GDB를 사용한 스택 프레임 기반 단위 테스팅을 위한 구조 설계

· 약 4분
이성희
박흥준
아제이쿠마르차
이우진
담당교수

논문 정보

  • 제목: Structure Design for Unit Testing based on Stack Frame to use GDB
  • 저자: Sunghee Lee, Heungjun Park, Ajay Kumar Jha, Woo Jin Lee (Kyungpook National University)
  • 학회/저널: 한국컴퓨터정보학회 하계학술대회 논문집 제23권 제2호 (Proceedings of the KSCI Summer Conference 2015)
  • 발행일: 2015-07
  • 주요 연구 내용: 디버깅 도구인 GDB를 테스팅 과정에 연계하여, 실행 중인 프로세스의 단위 소프트웨어 스택 프레임으로부터 정보를 추출해 단위 테스팅을 수행하는 구조를 설계함.
  • 주요 결과 및 결론: 별도의 소스 코드 수정 없이 함수 인자와 반환 값을 획득하여 단위 테스팅이 가능함을 확인하였으며, 이를 통해 런타임 테스팅과 자동 단위 테스팅의 기반을 마련함.
  • 기여점: 테스트 내장형 컴포넌트 방식의 단점인 테스트 코드 개발 부담과 코드 수정 시의 유지보수 문제를 해결하고, 비침습적(Non-intrusive) 방식으로 테스팅 환경을 구축할 수 있는 구조를 제안함.

요약

초록

최근 임베디드 소프트웨어의 비중과 규모가 증가함에 따라 테스팅의 중요성 또한 높아지고 있다. 본 논문에서는 디버깅 도구인 GDB를 테스팅 과정에 접목하여, 현재 실행 중인 프로세스 내 검사 대상 단위 소프트웨어의 스택 프레임(Stack Frame)으로부터 정보를 획득하는 구조를 제안한다. 이 구조를 통해 원본 코드를 수정하지 않고도 단위 테스팅 수행이 가능해지며, 런타임 테스팅 및 자동 단위 테스팅을 실현할 수 있다.

서론

임베디드 시스템에서 소프트웨어 결함은 전체 시스템 품질에 치명적인 영향을 미친다. 테스팅은 실행 결과가 기대 결과와 일치하는지 확인하는 활동이며, 디버깅은 불일치 시 원인을 찾아 수정하는 활동이다. 기존 연구들에서도 디버깅 정보를 테스팅에 연계하여 에뮬레이터를 자동 실행하거나 응용프로그램 프로파일링에 적용하는 시도가 있었다. 본 연구는 GDB를 사용하여 실행 중인 프로세스의 스택 프레임 정보를 획득함으로써, 별도의 코드 수정 없이 단위 테스팅이 가능한 구조를 제안한다.

배경

관련 연구 및 문제점

기존의 테스트 내장형 컴포넌트는 테스트 용이성을 위해 테스트 코드를 미리 내장하는 방식을 사용한다. 이는 개발자가 테스트 코드를 함께 개발해야 하는 부담을 주며, 원본 코드가 변경될 때 테스트 코드도 함께 수정해야 하는 유지보수 상의 문제점이 존재한다.

GDB와 스택 프레임

  • GDB (The GNU Project Debugger): 프로세스 실행 중에 내부 상태를 관찰할 수 있게 해주는 디버거로, 본 연구에서는 실행 중인 애플리케이션의 스택 프레임 정보를 얻기 위해 사용된다.
  • 스택 프레임 (Stack Frame): 활성화 레코드(Activation Record)라고도 하며, 함수가 호출될 때 할당되는 스택 영역이다. 이곳에는 함수 인자, 반환 값, 지역 변수 등의 정보가 저장된다.

모델 아키텍처 / 방법론

Figure 1

단위 테스팅 구조

논문의 Figure 1은 GDB를 사용해 스택 프레임 정보를 얻는 전체 구조를 보여준다. 핵심 프로세스는 다음과 같다.

  1. 애플리케이션 실행: 대상 애플리케이션을 컴파일한 후 GDB를 통해 실행한다.
  2. 스크립트 기반 제어: 테스팅 수행 전, 대상 함수에 대한 스크립트 정보(함수명, 명령어 등)를 작성한다.
  3. 정보 추출: 애플리케이션 동작 중 스크립트에 명시된 대상 함수가 실행되면, GDB는 해당 시점의 스택 프레임에 접근한다.
  4. 로그 기록: 함수의 인자 정보를 가져오고, 수행이 완료되면 반환 값 정보를 가져와 로그 파일로 기록한다.

GDB 제어 흐름

테스트 스크립트는 일반적으로 다음과 같은 GDB 명령어 흐름을 따른다.

  • break mySum: 대상 함수에 중단점 설정
  • run: 프로그램 실행
  • info frame: 현재 스택 프레임 정보 확인 (인자 값 등 획득)
  • finish: 함수 수행 완료 시점까지 실행 (반환 값 획득)
  • quit: 종료

실험 결과

본 논문은 구조 설계에 중점을 둔 연구로, 제안된 구조가 실제로 작동하는 예시를 Figure 1의 하단부를 통해 보여준다.

  • 함수 호출 시: mySum(a=3, b=5)와 같이 함수가 호출되었을 때, GDB가 중단점(Breakpoint 1)에서 멈추고 인자 값(args: a=3, b=5)을 식별한다.
  • 함수 반환 시: 함수 실행이 끝난 후 반환 값(Value returned is $1 = 8)을 획득한다.
  • 이러한 정보들은 별도의 코드 삽입 없이 GDB의 기능만으로 추출되었으며, 이를 로그로 저장하여 테스팅 데이터로 활용할 수 있음을 확인했다.

결론

본 연구는 GDB를 활용하여 애플리케이션 내부에 별도의 테스트 코드를 추가하거나 수정하지 않고도 단위 테스팅을 수행할 수 있는 구조를 제안하였다. 이는 코드 변경에 따른 테스트 코드 수정의 번거로움을 해결하고, 런타임 테스팅과 자동 테스팅을 가능하게 한다. 향후 연구로는 추출된 스택 프레임의 로그 정보를 자동으로 분석할 수 있는 프레임워크에 대한 연구가 필요하다.